{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "definitions": {
        "configurations": {
            "type": "array",
            "items": {
                "type": "object",
                "required": [
                    "name"
                ],
                "properties": {
                    "name": {
                        "markdownDescription": "Configuration identifier. `Mac`, `Linux`, and `Win32` are special identifiers for configurations that will be auto-selected on those platforms, but the identifier can be anything.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "string"
                    },
                    "compilerPath": {
                        "markdownDescription": "Full path of the compiler being used, e.g. `/usr/bin/gcc`, to enable more accurate IntelliSense.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "string"
                    },
                    "compilerArgs": {
                        "markdownDescription": "Compiler arguments to modify the includes or defines used, e.g. `-nostdinc++`, `-m32`, etc.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cStandard": {
                        "description": "Version of the C language standard to use for IntelliSense. Note: GNU standards are only used to query the set compiler to get GNU defines, and IntelliSense will emulate the equivalent C standard version.",
                        "type": "string",
                        "enum": [
                            "c89",
                            "c99",
                            "c11",
                            "c17",
                            "gnu89",
                            "gnu99",
                            "gnu11",
                            "gnu17",
                            "${default}"
                        ]
                    },
                    "cppStandard": {
                        "description": "Version of the C++ language standard to use for IntelliSense. Note: GNU standards are only used to query the set compiler to get GNU defines, and IntelliSense will emulate the equivalent C++ standard version.",
                        "type": "string",
                        "enum": [
                            "c++98",
                            "c++03",
                            "c++11",
                            "c++14",
                            "c++17",
                            "c++20",
                            "c++23",
                            "gnu++98",
                            "gnu++03",
                            "gnu++11",
                            "gnu++14",
                            "gnu++17",
                            "gnu++20",
                            "gnu++23",
                            "${default}"
                        ]
                    },
                    "compileCommands": {
                        "markdownDescription": "Full path to `compile_commands.json` file for the workspace.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "string"
                    },
                    "includePath": {
                        "markdownDescription": "A list of paths for the IntelliSense engine to use while searching for included headers. Searching on these paths is not recursive. Specify `**` to indicate recursive search. For example, `${workspaceFolder}/**` will search through all subdirectories while `${workspaceFolder}` will not. Usually, this should not include system includes; instead, set `C_Cpp.default.compilerPath`.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "macFrameworkPath": {
                        "description": "A list of paths for the Intellisense engine to use while searching for included headers from Mac frameworks. Only supported on Mac configuration.",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "windowsSdkVersion": {
                        "markdownDescription": "Version of the Windows SDK include path to use on Windows, e.g. `10.0.17134.0`.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "string",
                        "pattern": "^\\d{2}\\.\\d{1}\\.\\d{5}\\.\\d{1}$|^8\\.1$"
                    },
                    "dotConfig": {
                        "description": "A path to a .config file created by Kconfig system. Kconfig system generates a file with all the defines to build a project. Examples of projects that use Kconfig system are the Linux Kernel and NuttX RTOS.",
                        "type": "string"
                    },
                    "defines": {
                        "markdownDescription": "A list of preprocessor definitions for the IntelliSense engine to use while parsing files. Optionally, use `=` to set a value, e.g. `VERSION=1`.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "intelliSenseMode": {
                        "markdownDescription": "The IntelliSense mode to use that maps to a platform and architecture variant of MSVC, gcc, or Clang. If not set or if set to `${default}`, the extension will choose the default for that platform. Windows defaults to `windows-msvc-x64`, Linux defaults to `linux-gcc-x64`, and macOS defaults to `macos-clang-x64`. IntelliSense modes that only specify `<compiler>-<architecture>` variants (e.g. `gcc-x64`) are legacy modes and are converted automatically to the `<platform>-<compiler>-<architecture>` variants based on the host platform.",
                        "descriptionHint": "Uses of words 'platform', 'compiler', and 'architecture' are meant to be descriptive placeholders for literal values, so they should be translated, but without changing the surrounding `<>-<>` symbols. All other text inside `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "string",
                        "enum": [
                            "macos-clang-x86",
                            "macos-clang-x64",
                            "macos-clang-arm",
                            "macos-clang-arm64",
                            "macos-gcc-x86",
                            "macos-gcc-x64",
                            "macos-gcc-arm",
                            "macos-gcc-arm64",
                            "linux-clang-x86",
                            "linux-clang-x64",
                            "linux-clang-arm",
                            "linux-clang-arm64",
                            "linux-gcc-x86",
                            "linux-gcc-x64",
                            "linux-gcc-arm",
                            "linux-gcc-arm64",
                            "windows-clang-x86",
                            "windows-clang-x64",
                            "windows-clang-arm",
                            "windows-clang-arm64",
                            "windows-gcc-x86",
                            "windows-gcc-x64",
                            "windows-gcc-arm",
                            "windows-gcc-arm64",
                            "windows-msvc-x86",
                            "windows-msvc-x64",
                            "windows-msvc-arm",
                            "windows-msvc-arm64",
                            "clang-x86",
                            "clang-x64",
                            "clang-arm",
                            "clang-arm64",
                            "gcc-x86",
                            "gcc-x64",
                            "gcc-arm",
                            "gcc-arm64",
                            "msvc-x86",
                            "msvc-x64",
                            "msvc-arm",
                            "msvc-arm64",
                            "${default}"
                        ]
                    },
                    "forcedInclude": {
                        "description": "A list of files that should be included before any include file in a translation unit.",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "configurationProvider": {
                        "description": "The id of a VS Code extension that can provide IntelliSense configuration information for source files.",
                        "type": "string"
                    },
                    "mergeConfigurations": {
                        "markdownDescription": "Set to `true` to merge include paths, defines, and forced includes with those from a configuration provider.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "type": "boolean"
                    },
                    "browse": {
                        "type": "object",
                        "properties": {
                            "limitSymbolsToIncludedHeaders": {
                                "markdownDescription": "Set to `true` to process only those files directly or indirectly included as headers. Set to `false` to process all files under the specified include paths.",
                                "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                                "type": [
                                    "boolean",
                                    "string"
                                ]
                            },
                            "databaseFilename": {
                                "description": "Path to the generated symbol database. If a relative path is specified, it will be made relative to the workspace's default storage location.",
                                "type": "string"
                            },
                            "path": {
                                "markdownDescription": "A list of paths to use for indexing and parsing of workspace symbols (for use by 'Go to Definition', 'Find All References', etc.). Searching on these paths is recursive by default. Specify `*` to indicate non-recursive search. For example, `${workspaceFolder}` will search through all subdirectories while `${workspaceFolder}/*` will not.",
                                "descriptionHint": "Text in '' is a command and should be translated in the same way that VS Code itself translates it. Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            }
                        },
                        "additionalProperties": false
                    },
                    "customConfigurationVariables": {
                        "type": "object",
                        "markdownDescription": "Custom variables that can be queried through the command `${cpptools:activeConfigCustomVariable}` to use for the input variables in `launch.json` or `tasks.json`.",
                        "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.",
                        "patternProperties": {
                            "(^.+$)": {
                                "type": "string"
                            }
                        },
                        "additionalProperties": false
                    }
                },
                "additionalProperties": false
            }
        },
        "env": {
            "type": "object",
            "markdownDescription": "Custom variables that can be reused anywhere in this file using the `${variable}` or `${env:variable}` syntax.",
            "descriptionHint": "The word 'variable' within curly braces should be translated. The \"env\" should not be translated, and the capitalization, spacing, and punctuation (\"${:}\", including the ``) should be preserved.",
            "patternProperties": {
                "(?!^workspaceFolder$)(?!^workspaceRoot$)(?!^workspaceFolderBasename$)(?!^execPath$)(?!^pathSeparator$)(?!^default$)(^.+$)": {
                    "oneOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "version": {
            "type": "integer",
            "description": "Version of the configuration file. This property is managed by the extension. Please do not change it."
        },
        "enableConfigurationSquiggles": {
            "type": "boolean",
            "default": true,
            "markdownDescription": "Controls whether the extension will report errors detected in `c_cpp_properties.json`.",
            "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered."
        }
    },
    "properties": {
        "configurations": {
            "$ref": "#/definitions/configurations"
        },
        "env": {
            "$ref": "#/definitions/env"
        },
        "version": {
            "$ref": "#/definitions/version"
        },
        "enableConfigurationSquiggles": {
            "$ref": "#/definitions/enableConfigurationSquiggles"
        }
    },
    "required": [
        "configurations",
        "version"
    ],
    "additionalProperties": false
}
